package com.micangcaihang.common.base.app;

import android.app.Application;
import android.os.Handler;
import android.os.Looper;

import com.micangcaihang.common.BuildConfig;
import com.micangcaihang.common.loader.LoaderManager;
import com.micangcaihang.common.utils.ALog;
import com.micangcaihang.common.utils.CrashUtils;
import com.micangcaihang.common.utils.Utils;


/**
 * <pre>
 *     author : Fandy
 *     e-mail : fandayonggmail@gmail.com
 *     time   : 2017/06/16
 *     desc   : Application基类
 *     version: 1.0
 * </pre>
 */

public class BaseApp extends Application {

    protected static BaseApp instance;

    private static Handler mHandler = new Handler(Looper.getMainLooper());

    static {
        instance = null;
    }

    public BaseApp() {
        instance = this;
    }


    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        Utils.init(instance);
        CrashUtils.init();
        initLog();
        LoaderManager.getLoader().init(this);
    }

    public static Handler handler() {
        if (mHandler == null) {
            mHandler = new Handler(Looper.getMainLooper());
        }
        if (mHandler.getLooper() != Looper.getMainLooper()) {
            mHandler = new Handler(Looper.getMainLooper());
        }
        return mHandler;

    }

    public static <T extends BaseApp> T me() {
        return (T) instance;
    }

    public void initLog() {
        ALog.Builder builder = new ALog.Builder(instance)
                .setLogSwitch(BuildConfig.LOG_DEBUG)// 设置log总开关，包括输出到控制台和文件，默认开
                .setConsoleSwitch(true)// 设置是否输出到控制台开关，默认开
                .setGlobalTag(null)// 设置log全局标签，默认为空
                // 当全局标签不为空时，我们输出的log全部为该tag，
                // 为空时，如果传入的tag为空那就显示类名，否则显示tag
                .setLogHeadSwitch(true)// 设置log头信息开关，默认为开
                .setLog2FileSwitch(false)// 打印log时是否存到文件的开关，默认关
                .setDir("")// 当自定义路径为空时，写入应用的/cache/log/目录中
                .setBorderSwitch(false)// 输出日志是否带边框开关，默认开
                .setConsoleFilter(ALog.V)// log的控制台过滤器，和logcat过滤器同理，默认Verbose
                .setFileFilter(ALog.V);// log文件过滤器，和logcat过滤器同理，默认Verbose
        ALog.d(builder.toString());
    }
}
